package br.com.tarcilahelpdesk.managedBeans;

import br.com.tarcilahelpdesk.enums.EnumObjetosPersistentes;
import br.com.tarcilahelpdesk.enums.EnumTipoChamado;
import java.io.Serializable;
import javax.faces.bean.*;
import javax.faces.context.FacesContext;

/**
 * MB do menu.
 * @author vinicius.fonseca
 */
@ManagedBean(name = "menu")
@SessionScoped
public class MenuBean implements Serializable
{

    private boolean exibirBotaoNovoChamado;
    private boolean exibirBotaoAdministracao;
    private boolean exibirBotaoAtendentes;
    private boolean exibirBotaoChamados;
    private boolean exibirBotaoEquipes;
    private boolean exibirBotaoFluxos;
    private boolean exibirBotaoServicos;
    private boolean exibirBotaoSolicitantes;
    private boolean exibirBotaoCustomizar;
    private boolean exibirBotaoVoltar;
    private boolean exibirBotaoAtividadesEquipe;
    private boolean exibirBotaoAtributosEquipe;
    private boolean exibirBotaoServicosIncidente;
    private boolean exibirBotaoServicosRequisicao;
    private boolean exibirBotaoServicosProblema;
    private boolean exibirBotaoCadastros;
    private boolean exibirBotaoCadastroSolicitantes;
    private boolean exibirBotaoCadastroServicos;
    private boolean exibirBotaoFilaChamados;

    /**
     * Construtor
     */
    public MenuBean()
    {
        exibirBotaoNovoChamado = true;
        exibirBotaoAdministracao = true;

    }

    /**
     * Cada novo atributo booleano deverá ser incluído neste método, para setar todos os falores para false.
     */
    public void ocultarTodos()
    {
        setExibirBotaoAdministracao(false);
        setExibirBotaoAtendentes(false);
        setExibirBotaoAtividadesEquipe(false);
        setExibirBotaoAtributosEquipe(false);
        setExibirBotaoChamados(false);
        setExibirBotaoCustomizar(false);
        setExibirBotaoEquipes(false);
        setExibirBotaoFluxos(false);
        setExibirBotaoNovoChamado(false);
        setExibirBotaoServicos(false);
        setExibirBotaoSolicitantes(false);
        setExibirBotaoVoltar(false);
        setExibirBotaoServicosIncidente(false);
        setExibirBotaoServicosProblema(false);
        setExibirBotaoServicosRequisicao(false);
        setExibirBotaoCadastros(false);
        setExibirBotaoCadastroSolicitantes(false);
        setExibirBotaoCadastroServicos(false);
        setExibirBotaoFilaChamados(false);
    }

    /**
     * Cada novo atributo booleano deverá ser incluído neste método, para setar todos os falores para true.
     */
    public void exibirTodos()
    {
        setExibirBotaoAdministracao(true);
        setExibirBotaoAtendentes(true);
        setExibirBotaoAtividadesEquipe(true);
        setExibirBotaoAtributosEquipe(true);
        setExibirBotaoChamados(true);
        setExibirBotaoCustomizar(true);
        setExibirBotaoEquipes(true);
        setExibirBotaoFluxos(true);
        setExibirBotaoNovoChamado(true);
        setExibirBotaoServicos(true);
        setExibirBotaoSolicitantes(true);
        setExibirBotaoVoltar(true);
        setExibirBotaoServicosIncidente(true);
        setExibirBotaoServicosProblema(true);
        setExibirBotaoServicosRequisicao(true);
        setExibirBotaoCadastros(true);
        setExibirBotaoCadastroSolicitantes(true);
        setExibirBotaoCadastroServicos(true);
        setExibirBotaoFilaChamados(true);
    }

    /**
     * Insere na flash o enum de Solicitante e abre o crud de atributos de solicitante.
     * @return String = navegação JSF 2.0
     */
    public String abrirCrudSolicitante()
    {
        FacesContext.getCurrentInstance().getExternalContext().getFlash().put("objetoPersistente", EnumObjetosPersistentes.Solicitante);
        return "/administracao/customizacoes/crud";
    }

    /**
     * Insere na flash o enum de Fluxo e abre o crud de atributos de fluxo.
     * @return String = navegação JSF 2.0
     */
    public String abrirCrudFluxo()
    {
        FacesContext.getCurrentInstance().getExternalContext().getFlash().put("objetoPersistente", EnumObjetosPersistentes.Fluxo);
        return "/administracao/customizacoes/crud";
    }

    /**
     * Insere na flash o enum de equipe e abre o crud de atributos de equipe.
     * @return String = navegação JSF 2.0
     */
    public String abrirCrudEquipe()
    {
        FacesContext.getCurrentInstance().getExternalContext().getFlash().put("objetoPersistente", EnumObjetosPersistentes.Equipe);
        return "/administracao/customizacoes/crud";
    }

    /**
     * Insere na flash o enum de chamado e abre o crud de atributos de chamado.
     * @return String = navegação JSF 2.0
     */
    public String abrirCrudChamado()
    {
        FacesContext.getCurrentInstance().getExternalContext().getFlash().put("objetoPersistente", EnumObjetosPersistentes.Chamado);
        return "/administracao/customizacoes/crud";
    }

    /**
     * Insere na flash o enum de atendente e abre o crud de atributos de atendente.
     * @return String = navegação JSF 2.0
     */
    public String abrirCrudAtendente()
    {
        FacesContext.getCurrentInstance().getExternalContext().getFlash().put("objetoPersistente", EnumObjetosPersistentes.Atendente);
        return "/administracao/customizacoes/crud";
    }

    /**
     * Insere na flash o enum de tipo de chamado incidente e abre o crud de atributos de servico de incidente.
     * @return String = navegação JSF 2.0
     */
    public String abrirCrudServicoIncidente()
    {
        FacesContext.getCurrentInstance().getExternalContext().getFlash().put("objetoPersistente", EnumObjetosPersistentes.Servico);
        FacesContext.getCurrentInstance().getExternalContext().getFlash().put("tipoChamado", EnumTipoChamado.Incidente);
        return "/administracao/customizacoes/crud";
    }

    /**
     * Insere na flash o enum de tipo de chamado requisicao e abre o crud de atributos de servico de requisicao.
     * @return String = navegação JSF 2.0
     */
    public String abrirCrudServicoRequisicao()
    {
        FacesContext.getCurrentInstance().getExternalContext().getFlash().put("objetoPersistente", EnumObjetosPersistentes.Servico);
        FacesContext.getCurrentInstance().getExternalContext().getFlash().put("tipoChamado", EnumTipoChamado.Requisicao);
        return "/administracao/customizacoes/crud";
    }

    /**
     * Insere na flash o enum de tipo de chamado problema e abre o crud de atributos de servico de problema.
     * @return String = navegação JSF 2.0
     */
    public String abrirCrudServicoProblema()
    {

        FacesContext.getCurrentInstance().getExternalContext().getFlash().put("objetoPersistente", EnumObjetosPersistentes.Servico);
        FacesContext.getCurrentInstance().getExternalContext().getFlash().put("tipoChamado", EnumTipoChamado.Problema);
        return "/administracao/customizacoes/crud";
    }

    /**
     * Configura os botoes do menu e navega para a pagina de customizacao.
     * @return String = navegação JSF 2.0
     */
    public String abrirCustomizar()
    {
        ocultarTodos();
        setExibirBotaoAdministracao(true);
        setExibirBotaoAtendentes(true);
        setExibirBotaoChamados(true);
        setExibirBotaoEquipes(true);
        setExibirBotaoFluxos(true);
        setExibirBotaoServicos(true);
        setExibirBotaoSolicitantes(true);
        return "/administracao/customizacoes/customizacao";
    }

    /**
     * Configura os botoes do menu e navega para a pagina de cadastros.
     * @return String = navegação JSF 2.0
     */
    public String abrirCadastros()
    {
        ocultarTodos();
        setExibirBotaoAdministracao(true);
        setExibirBotaoCadastroSolicitantes(true);
        setExibirBotaoCadastroServicos(true);
        return "/administracao/cadastros/cadastros";
    }

    /**
     * Configura os botoes do menu e navega para a pagina de cadastro de solicitantes.
     * @return String = navegação JSF 2.0
     */
    public String abrirCadastroSolicitantes()
    {
        return "/administracao/cadastros/solicitantes/solicitantes";
    }

    /**
     * Configura os botoes do menu e navega para a pagina de cadastro de servicos.
     * @return String = navegação JSF 2.0
     */
    public String abrirCadastroServicos()
    {
        return "/administracao/cadastros/servicos/servicos";
    }

    /**
     * Configura os botoes do menu para exibir as opções da equipe e navega para a pagina de customizacao.
     * @return String = navegação JSF 2.0
     */
    public String abrirEquipes()
    {
        ocultarTodos();
        setExibirBotaoCustomizar(true);
        setExibirBotaoAtividadesEquipe(true);
        setExibirBotaoAtributosEquipe(true);
        return "/administracao/customizacoes/customizacao";
    }

    /**
     * Configura os botoes do menu para exibir as opções da equipe e navega para a pagina de customizacao.
     * @return String = navegação JSF 2.0
     */
    public String abrirServicos()
    {
        ocultarTodos();
        setExibirBotaoCustomizar(true);
        setExibirBotaoServicosIncidente(true);
        setExibirBotaoServicosRequisicao(true);
        setExibirBotaoServicosProblema(true);
        return "/administracao/customizacoes/servicos/servicos";
    }

    /**
     * Configura os botoes do menu e navega para a pagina de administracao.
     * @return String = navegação JSF 2.0
     */
    public String abrirAdministracao()
    {
        ocultarTodos();
        setExibirBotaoFilaChamados(true);
        setExibirBotaoCadastros(true);
        setExibirBotaoCustomizar(true);
        setExibirBotaoVoltar(true);
        return "/administracao/administracao";
    }

    /**
     * Configura os botoes do menu e navega para a pagina de fila de chamados.
     * @return String = navegação JSF 2.0
     */
    public String abrirFilaChamados()
    {
        ocultarTodos();
        setExibirBotaoFilaChamados(true);
        setExibirBotaoAdministracao(true);
        return "/administracao/fila";
    }

    /**
     * Configura os botoes do menu e navega para a pagina principal.
     * @return String = navegação JSF 2.0
     */
    public String abrirPrincipal()
    {
        ocultarTodos();
        setExibirBotaoAdministracao(true);
        setExibirBotaoNovoChamado(true);
        return "/inicio";
    }

    //Getters and Setters
    public boolean isExibirBotaoCadastroServicos()
    {
        return exibirBotaoCadastroServicos;
    }

    public void setExibirBotaoCadastroServicos(boolean exibirBotaoCadastroServicos)
    {
        this.exibirBotaoCadastroServicos = exibirBotaoCadastroServicos;
    }

    public boolean isExibirBotaoCadastroSolicitantes()
    {
        return exibirBotaoCadastroSolicitantes;
    }

    public void setExibirBotaoCadastroSolicitantes(boolean exibirBotaoCadastroSolicitantes)
    {
        this.exibirBotaoCadastroSolicitantes = exibirBotaoCadastroSolicitantes;
    }

    public boolean isExibirBotaoCadastros()
    {
        return exibirBotaoCadastros;
    }

    public void setExibirBotaoCadastros(boolean exibirBotaoCadastros)
    {
        this.exibirBotaoCadastros = exibirBotaoCadastros;
    }

    public boolean isExibirBotaoServicosIncidente()
    {
        return exibirBotaoServicosIncidente;
    }

    public void setExibirBotaoServicosIncidente(boolean exibirBotaoServicosIncidente)
    {
        this.exibirBotaoServicosIncidente = exibirBotaoServicosIncidente;
    }

    public boolean isExibirBotaoServicosProblema()
    {
        return exibirBotaoServicosProblema;
    }

    public void setExibirBotaoServicosProblema(boolean exibirBotaoServicosProblema)
    {
        this.exibirBotaoServicosProblema = exibirBotaoServicosProblema;
    }

    public boolean isExibirBotaoServicosRequisicao()
    {
        return exibirBotaoServicosRequisicao;
    }

    public void setExibirBotaoServicosRequisicao(boolean exibirBotaoServicosRequisicao)
    {
        this.exibirBotaoServicosRequisicao = exibirBotaoServicosRequisicao;
    }

    public boolean isExibirBotaoAdministracao()
    {
        return exibirBotaoAdministracao;
    }

    public void setExibirBotaoAdministracao(boolean exibirBotaoAdministracao)
    {
        this.exibirBotaoAdministracao = exibirBotaoAdministracao;
    }

    public boolean isExibirBotaoAtendentes()
    {
        return exibirBotaoAtendentes;
    }

    public void setExibirBotaoAtendentes(boolean exibirBotaoAtendentes)
    {
        this.exibirBotaoAtendentes = exibirBotaoAtendentes;
    }

    public boolean isExibirBotaoChamados()
    {
        return exibirBotaoChamados;
    }

    public void setExibirBotaoChamados(boolean exibirBotaoChamados)
    {
        this.exibirBotaoChamados = exibirBotaoChamados;
    }

    public boolean isExibirBotaoEquipes()
    {
        return exibirBotaoEquipes;
    }

    public void setExibirBotaoEquipes(boolean exibirBotaoEquipes)
    {
        this.exibirBotaoEquipes = exibirBotaoEquipes;
    }

    public boolean isExibirBotaoFluxos()
    {
        return exibirBotaoFluxos;
    }

    public void setExibirBotaoFluxos(boolean exibirBotaoFluxos)
    {
        this.exibirBotaoFluxos = exibirBotaoFluxos;
    }

    public boolean isExibirBotaoNovoChamado()
    {
        return exibirBotaoNovoChamado;
    }

    public void setExibirBotaoNovoChamado(boolean exibirBotaoNovoChamado)
    {
        this.exibirBotaoNovoChamado = exibirBotaoNovoChamado;
    }

    public boolean isExibirBotaoServicos()
    {
        return exibirBotaoServicos;
    }

    public void setExibirBotaoServicos(boolean exibirBotaoServicos)
    {
        this.exibirBotaoServicos = exibirBotaoServicos;
    }

    public boolean isExibirBotaoSolicitantes()
    {
        return exibirBotaoSolicitantes;
    }

    public void setExibirBotaoSolicitantes(boolean exibirBotaoSolicitantes)
    {
        this.exibirBotaoSolicitantes = exibirBotaoSolicitantes;
    }

    public boolean isExibirBotaoCustomizar()
    {
        return exibirBotaoCustomizar;
    }

    public void setExibirBotaoCustomizar(boolean exibirBotaoCustomizar)
    {
        this.exibirBotaoCustomizar = exibirBotaoCustomizar;
    }

    public boolean isExibirBotaoVoltar()
    {
        return exibirBotaoVoltar;
    }

    public void setExibirBotaoVoltar(boolean exibirBotaoVoltar)
    {
        this.exibirBotaoVoltar = exibirBotaoVoltar;
    }

    public boolean isExibirBotaoAtividadesEquipe()
    {
        return exibirBotaoAtividadesEquipe;
    }

    public void setExibirBotaoAtividadesEquipe(boolean exibirBotaoAtividadesEquipe)
    {
        this.exibirBotaoAtividadesEquipe = exibirBotaoAtividadesEquipe;
    }

    public boolean isExibirBotaoAtributosEquipe()
    {
        return exibirBotaoAtributosEquipe;
    }

    public void setExibirBotaoAtributosEquipe(boolean exibirBotaoAtributosEquipe)
    {
        this.exibirBotaoAtributosEquipe = exibirBotaoAtributosEquipe;
    }

    public boolean isExibirBotaoFilaChamados()
    {
        return exibirBotaoFilaChamados;
    }

    public void setExibirBotaoFilaChamados(boolean exibirBotaoFilaChamados)
    {
        this.exibirBotaoFilaChamados = exibirBotaoFilaChamados;
    }
}
